package active;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * @author 陈华旺
 * @version 1.0
 * @date 2023年11月21日 14:11
 * @Description TODO
 */
@WebServlet("/test07")
public class Test07Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        网络请求而言：HTTP请求模式主要 get post put delete pacth options
//              => http在网络请求时将请求的信息描述分成了两个部分 [请求头，请求体]
//                  + 请求头：记录请求的相关定义(请求地址，客户端IP，客户端的系统……)
//                  + 请求体：一般为空，只有当请求具有参数时才会存在数据=>请求参数体 【get和options没有请求体】
//              => http在网络响应时将响应的信息描述分成了两个部分 [响应头，响应体]
//                  + 响应头：向浏览器传递的相关响应结果的配置(文件类型，字符集……)
//                  + 响应体：服务器向浏览器返回的数据结果

//         网络请求参数基于参数存放位置分为
//             1. 请求地址查询参数(请求头参数) query string params  => 容量限制
//                  + 参数出现在请求地址栏中(请求地址中)
//                  + 参数和地址之间通过 ? 关键字分割，参数与参数之间以 & 关键字分割，参数名与参数值之间 = 方式分割
//                      例如   xxxxx/xxxxx?参数名1=参数值&参数名2=参数值……
//                  + 请求地址只支持ASSII码的，所以所有其它文件都会直接转换为ASSII编码，所有服务器获取参数后是会进行转换操作的
//             2. 请求体参数 From Data | payload  => 理论上是无限的
//                  + 参数出现在请求体中，不出现在地址上
//                  + 请求体参数是不能手动定义，必须通过表单或专用方法进行发送
//                  + 请求体参数固定统一字符编码未 ISO8859-1 = 当服务器使用的不是该字符集进行参数解码时会出现乱码
        String name = req.getParameter("name");
        String addr = req.getParameter("addr");
        System.out.println( "姓名:" + name );
        System.out.println( "地址:" + addr );
        System.out.println("手动转码");
        String nname = new String( name.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8 );
        String naddr = new String( addr.getBytes("ISO-8859-1"),"UTF-8" );
        System.out.println( "姓名:" + nname );
        System.out.println( "地址:" + naddr );
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().println("OK-使用web/test07Params.html");
    }
}
